﻿---------------------------------------------------------------------------------------------------------
---------------------------------------------pca_hotel.grupos--------------------------------------------
---------------------------------------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION pca_hotel.fn_add_grupo(varchar,--empresa_id $1 
						  varchar --nombre $2
						  )RETURNS bigint AS
$$
BEGIN
	INSERT INTO pca_hotel.grupos
		(empresa_id,
		nombre)
	VALUES
		($1,$2);

	RETURN pca_global.fn_pseudo_encrypt_bigint(currval('pca_hotel.grupos_id')::integer);
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_hotel.fn_update_grupo(bigint,--grupo_id $1
					      varchar,--empresa_id $2
					      varchar --nombre $3
					      )RETURNS void AS
$$
BEGIN
	UPDATE pca_hotel.grupos SET
		empresa_id = $2,
		nombre = $3
	WHERE
		grupo_id = $1;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_hotel.fn_del_grupo(bigint --grupo_id $1
					)RETURNS void AS
$$
BEGIN
	DELETE FROM pca_hotel.grupos WHERE grupo_id = $1;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_hotel.fn_get_list_grupos(varchar --empresa_id $1
						)RETURNS SETOF pca_hotel.grupos AS
$$
DECLARE
	_row pca_hotel.grupos%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			grupo_id,
			empresa_id,
			nombre
		FROM
			pca_hotel.grupos
		WHERE
			empresa_id=$1
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

---------------------------------------------------------------------------------------------------------
---------------------------------------------hotel.tarifas-----------------------------------------------
---------------------------------------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION pca_hotel.fn_add_tarifa(varchar,--empresa_id $1
						integer,--tiempo_horas $2
						varchar,--moneda_id $3
						numeric --precio $4
						)RETURNS bigint AS
$$
BEGIN
	INSERT INTO hotel.tarifas
		(empresa_id,
		tiempo_horas,
		moneda_id,
		precio)
	VALUES
		($1,$2,$3,$4);
		
	RETURN pca_global.fn_pseudo_encrypt_bigint(currval('hotel.tarifas_id')::integer);
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_hotel.fn_update_tarifa(bigint,--tarifa_id $1
						   varchar,--empresa_id $2
						   integer,--tiempo_horas $3
						   varchar,--moneda_id $4
						   numeric --precio $5
						   )RETURNS void AS
$$
BEGIN
	UPDATE hotel.tarifas SET
		empresa_id = $2,
		tiempo_horas = $3,
		moneda_id = $4,
		precio = $5
	WHERE
		tarifa_id = $1;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_hotel.fn_del_tarifa(bigint --tarifa_id $1
						   )RETURNS void AS
$$
BEGIN
	DELETE FROM hotel.tarifas WHERE tarifa_id = $1;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_hotel.fn_get_list_tarifas(varchar --empresa_id $1
							 )RETURNS SETOF pca_hotel.tarifas AS
$$
DECLARE
	_row pca_hotel.tarifas%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			tarifa_id,
			empresa_id,
			tiempo_horas,
			moneda_id,
			precio
		FROM
			pca_hotel.tarifas
		WHERE
			empresa_id = $1
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

---------------------------------------------------------------------------------------------------------
-----------------------------------------hotel.grupos_tarifas--------------------------------------------
---------------------------------------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION pca_hotel.fn_add_grupo_tarifa(bigint,--grupo_id $1
							 bigint --tarifa_id $2
							 )RETURNS void AS
$$
BEGIN
	INSERT INTO hotel.grupos_tarifas
		(grupo_id,
		tarifa_id)
	VALUES
		($1,$2);
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_hotel.fn_del_grupo_tarifa(bigint,--grupo_id $1
							 bigint --tarifa_id $2
							 )RETURNS void AS
$$
BEGIN
	DELETE FROM 
		hotel.grupos_tarifas 
	WHERE
		grupo_id = $1 AND
		tarifa_id = $2;
END;
$$
LANGUAGE plpgsql;

---------------------------------------------------------------------------------------------------------
------------------------------------pca_hotel.estados_habitaciones---------------------------------------
---------------------------------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION pca_hotel.fn_get_list_estados_habitacion()RETURNS SETOF pca_hotel.estados_habitaciones AS
$$
DECLARE
	_row pca_hotel.estados_habitaciones%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			estado_habitacion_id,
			nombre
		FROM
			pca_hotel.estados_habitaciones
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

---------------------------------------------------------------------------------------------------------
------------------------------------------hotel.habitaciones---------------------------------------------
---------------------------------------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION pca_hotel.fn_add_habitacion(varchar,--empresa_id $1
						       integer,--grupo_id $2
						       varchar,--codigo $3
						       varchar,--nombre $4
						       integer --piso $5
						       )RETURNS bigint AS
$$
BEGIN
	INSERT INTO pca_hotel.habitaciones
		(empresa_id,
		grupo_id,
		codigo,
		nombre,
		piso,
		estado_habitacion_id)
	VALUES
		($1,$2,$3,$4,$5,1);

	RETURN pca_global.fn_pseudo_encrypt_bigint(currval('pca_hotel.habitaciones_id')::integer);
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_hotel.fn_update_habitacion(bigint,--habitacion_id $1
							  varchar,--empresa_id $2
							  integer,--grupo_id $3
							  varchar,--codigo $4
							  varchar,--nombre $5
							  integer --piso $6
							  )RETURNS void AS
$$
BEGIN
	UPDATE pca_hotel.habitaciones SET
		empresa_id = $2,
		grupo_id = $3,
		codigo = $4,
		nombre = $5,
		piso = $6
	WHERE
		habitacion_id = $1;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_hotel.fn_delete_habitacion(bigint --habitacion_id $1
							  )RETURNS void AS
$$
BEGIN
	DELETE FROM pca_hotel.habitaciones WHERE habitacion_id = $1;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_hotel.fn_get_habitacion(bigint --habitacion_id $1
						       )RETURNS pca_hotel.habitaciones AS
$$
DECLARE
	_row pca_hotel.habitaciones%ROWTYPE;
BEGIN
	SELECT
		habitacion_id,
		empresa_id,
		grupo_id,
		codigo,
		nombre,
		piso,
		estado_habitacion_id,
		ocupado
	INTO
		_row
	FROM
		pca_hotel.habitaciones
	WHERE
		habitacion_id = $1;

	RETURN _row;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_hotel.fn_get_list_habitaciones(varchar --empresa_id
							      )RETURNS SETOF pca_hotel.habitaciones AS
$$
DECLARE
	_row pca_hotel.habitaciones%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			habitacion_id,
			empresa_id,
			grupo_id,
			codigo,
			nombre,
			piso,
			estado_habitacion_id,
			ocupado
		FROM
			pca_hotel.habitaciones
		WHERE
			empresa_id = $1
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;
